import java.util.Random;


/**
* Esta clase representa una baraja en general, aunque algunos m�todos s�lo sirve para el mus.
*
* @author Juan Belmonte, Carmen Parra, Luis Rodriguez
* @version 0.5.0
*/
public class Baraja {
	private Carta[] cartasBaraja;
	
	/**
	* Constructor por copia de la clase Baraja
	* 
	* @param juego JuegoCartas que sirve para construir una baraja diferente seg�n el juego de cartas.
	*  
	*/
	//construyo la baraja
	public Baraja(JuegoCartas juego){
		String path;
		if (juego.getTipoBaraja()=="espanola"){
			cartasBaraja = new Carta[40];
			//Inicializamos los 4 palos, 10 cartas cada palo
			for(int i=0; i<=3; i++){
				for(int j=0; j<=9;j++){
					path = "bin/imagenes/";
					if(i==0){
						path = path +  (j+1) + "oros.jpg"; 
						cartasBaraja[i*10 + j]=new Carta("oros",j +1, path);
					}else if(i==1){
						path = path  + (j+1) + "copas.jpg";
						cartasBaraja[i*10 + j]=new Carta("copas",j +1, path);
					}else if(i==2){
						path = path + (j+1) + "espadas.jpg";
						cartasBaraja[i*10 + j]=new Carta("espadas",j +1, path);
					}else{
						path = path + (j+1) + "bastos.jpg";
						cartasBaraja[i*10 + j]=new Carta("bastos",j +1, path);
					}
//					if(i==0){
//						cartasBaraja[i*10 + j]=new Carta("oros",j +1, path);
//					}else if(i==1){
//						cartasBaraja[i*10 + j]=new Carta("copas", j +1, path);
//					}else if(i==2){
//						cartasBaraja[i*10 + j]=new Carta("espadas", j+1, path);
//					}else{
//						cartasBaraja[i*10 + j]=new Carta("bastos", j+1, path);
//					}
				}
			}
		}
	}
	
	public Baraja(){
		
	}
	
	/**
	* Metodo toString de la clase baraja
	* 
	*/
	public String toString(){
		String aux = "";
		for(int i=0; i<=39;i++){
			aux = aux + cartasBaraja[i].toString() + '\n';			
		}
		return aux;
	}
	
	/**
	* Metodo que baraja las cartas usando Random
	* 
	*/
	public void barajar(){
		Random aux = new Random ();
		int n1, n2;
		for(int j=0; j<=1000;j++){
			for(int i=0; i<1000;i++){
				n1 = aux.nextInt(39);
				do{
					n2 = aux.nextInt(39);
				}while(n1==n2);
				Carta carta = cartasBaraja[n1];
				cartasBaraja[n1]=cartasBaraja[n2];
				cartasBaraja[n2]= carta;
			}
		}
		
	}
	
	/**
	* Metodo que muestra la baraja vali�ndose del toString de Carta
	* 
	*/
	public void mostrarBaraja(){
		for(int i=0; i<=cartasBaraja.length-1;i++){
			System.out.println(cartasBaraja[i].toString());
		}
	}
	
	/**
	* Metodo que devuelva una carta de la baraja segun una posicion dada
	* 
	* @param pos entero que le indica la posicion de la carta en la baraja
	* 
	*/
	public Carta getCarta(int pos){
		Carta aux = this.cartasBaraja[pos];
		return aux;

	}
	
	/**
	* Metodo que inserta una carta en la baraja
	* 
	* @param carta Carta que vas a insertar
	* 
	*/
	public void insertarCarta(Carta carta, Baraja baraja){
		Carta[] aux = new Carta[baraja.longitud() + 1];
		for (int i = 0; i < aux.length - 1; i++) {
			aux[i]=this.cartasBaraja[i];
		}
		aux[aux.length] = carta;
		this.cartasBaraja = aux;
		
	}
	
	
	/**
	* Metodo que redimensiona la baraja, elimina una carta segun una posicion dada
	* 
	* @param pos entero que le indica la carta a eliminar
	* 
	*/
	public void redimensionarBaraja(int pos){
		if (pos<this.cartasBaraja.length){
			Carta [] barajaAux = new Carta [this.cartasBaraja.length -1];
			int i, j;
			for(i =0, j =0; i<this.cartasBaraja.length ; i ++, j++){
				if(i!=pos){
					barajaAux[j]=this.cartasBaraja[i];
				}else{
					j--;
				}
			}
			this.cartasBaraja=barajaAux;
		}
	}

	
	public int getNumCartasBaraja(){
		return cartasBaraja.length;
	}
	
	public int longitud(){
		return cartasBaraja.length;
	}
}
